package structure.Composite;

/**
 * Created by LYJ on 2016/10/19.
 * 详细链接：Composite（组合）http://blog.csdn.net/u013256816/article/details/51009417
 */
public class MainTest {
    public static void main(String[] args)
    {
        Composite root = new Composite("树根");

        Composite branch01 = new Composite("树枝01");
        Composite branch02 = new Composite("树枝02");
        Composite branch03 = new Composite("树枝03");
        Composite branch04 = new Composite("树枝04");

        branch01.add(new Leaf("树叶01"));
        branch01.add(new Leaf("树叶02"));
        branch03.add(new Leaf("树叶03"));
        branch03.add(new Leaf("树叶04"));
        branch03.add(new Leaf("树叶05"));
        branch01.add(branch03);

        branch02.add(new Leaf("树叶06"));
        branch02.add(new Leaf("树叶07"));
        branch02.add(new Leaf("树叶08"));
        branch04.add(new Leaf("树叶09"));
        branch04.add(new Leaf("树叶10"));
        branch02.add(branch04);

        root.add(branch01);
        root.add(branch02);

        root.operation(0);
    }

}
/**
 * 使用场景：
 用于对象的部分-整体层次结构，如树形菜单、文件夹菜单、部门组织架构等。
 对用户隐藏组合对象与单个对象的不同，使得用户统一地使用组合结构中的所有对象。
 优缺点
 优点：使客户端调用简单，客户端可以一直的使用组合结构或其中单个对象，
 用户就不必关心自己处理的是单个对象还是整个组合结构，这就简化了客户端代码。
 更容易在组合体内加入对象不见，客户端不必因为加入了新的对象不见而更改代码。
 这一点符合开闭原则的要求，对系统的二次开发和功能扩展很有利。
 缺点：组合模式不容易限制组合中的构件。
 Jdk中的组合模式
 Java.util.Map#putAll(Map)
 java.util.List#addAll(Collection)
 java.util.Set#addAll(Collection)
 */
